package com.toe.forum.webapi.app;

import com.toe.forum.webapi.config.RabbitMQConfig;
import com.toe.forum.webapi.mapper.ForumArticleMapper;
import com.toe.pojo.dto.forum.ArticleReportUpdateDTO;
import com.toe.pojo.dto.forum.ArticleUpdateCountDTO;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

//这个对象也要交给Spring容器管理,才能实现监听Spring容器中保存的队列的效果
@Component
//和kafka不同的是,Kafka是在一个方法上声明监听器,而Rabbit是在类上声明
@RabbitListener(queues = {RabbitMQConfig.STOCK_QUEUE,RabbitMQConfig.STOCK_QUEUE2})
public class RabbitMQConsumer {

    @Autowired
    private ForumArticleMapper forumArticleMapper;
    //监听了这个类,但是运行代码的一定是个方法
    //框架要求这个类中只允许一个方法包含下面这个注解
    //表示这个方法是处理消息的方法
    //方法的参数就是消息的值
    @RabbitHandler
    public void process(ArticleUpdateCountDTO articleUpdateCountDTO){
        forumArticleMapper.updateCount(articleUpdateCountDTO);
    }

    @RabbitHandler
    public void process(ArticleReportUpdateDTO articleReportUpdateDTO){
        forumArticleMapper.updateArticleIsReport(articleReportUpdateDTO.getId(),articleReportUpdateDTO.getState());
    }
}
